﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace CoreWebApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(options=> {
                options.Filters.Add<DateTimeFilter>();
            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddCors();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseCors();
            app.UseMvc();
        }
        
        class DateTimeFilter: ActionFilterAttribute
        {
            public DateTimeFilter()
            {
                //Order = -9999;
            }
            public override void OnActionExecuting(ActionExecutingContext context)
            {
                //Header可以传递到Action，但是不能参数化
                context.HttpContext.Request.Headers["dt"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                base.OnActionExecuting(context);
            }

            public override void OnActionExecuted(ActionExecutedContext context)
            {
                context.HttpContext.Response.Headers["FinishedAt"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                base.OnActionExecuted(context);
            }
        }
    }

}
